控制结构 (if/else, 循环)

在编程中,控制结构是用于控制程序执行流程的重要工具。Scala 提供了多种控制结构,包括 if/else 语句和各种循环结构。这些结构帮助我们根据条件执行不同的代码块,或者重复执行某段代码。

1. if/else 语句

if/else 语句用于根据条件执行不同的代码块。它的基本结构如下:

if (条件) {
  // 条件为真时执行的代码
} else {
  // 条件为假时执行的代码
}

1.1 基本用法

val number = 10

if (number > 0) {
  println("Number is positive")
} else {
  println("Number is non-positive")
}

在这个例子中,如果 number 大于 0,程序会输出 "Number is positive";否则,输出 "Number is non-positive"。

1.2 else if 语句

你还可以使用 else if 来处理多个条件:

val number = 0

if (number > 0) {
  println("Number is positive")
} else if (number < 0) {
  println("Number is negative")
} else {
  println("Number is zero")
}

在这个例子中,程序会根据 number 的值输出不同的结果。

1.3 嵌套 if/else

if/else 语句可以嵌套使用,以处理更复杂的条件逻辑:

val number = 10

if (number > 0) {
  if (number % 2 == 0) {
    println("Number is positive and even")
  } else {
    println("Number is positive and odd")
  }
} else {
  println("Number is non-positive")
}

在这个例子中,程序首先检查 number 是否为正数,然后进一步检查它是奇数还是偶数。

2. 循环结构

循环结构用于重复执行某段代码,直到满足某个条件为止。Scala 提供了多种循环结构,包括 while 循环、do-while 循环和 for 循环。

2.1 while 循环

while 循环在条件为真时重复执行代码块:

var i = 0

while (i < 5) {
  println(s"Current value of i: $i")
  i += 1
}

在这个例子中,程序会输出 i 的值,直到 i 不再小于 5。

2.2 do-while 循环

do-while 循环与 while 循环类似,但它会先执行一次代码块,然后再检查条件:

var i = 0

do {
  println(s"Current value of i: $i")
  i += 1
} while (i < 5)

在这个例子中,即使 i 的初始值不满足条件,代码块也会至少执行一次。

2.3 for 循环

for 循环用于遍历集合或范围:

for (i <- 1 to 5) {
  println(s"Current value of i: $i")
}

在这个例子中,程序会输出从 1 到 5 的所有整数。

2.4 嵌套循环

循环可以嵌套使用,以处理更复杂的逻辑:

for (i <- 1 to 3) {
  for (j <- 1 to 3) {
    println(s"i: $i, j: $j")
  }
}

在这个例子中,程序会输出所有 i 和 j 的组合。

3. 实践练习

3.1 练习 1: 判断闰年

编写一个程序,判断给定的年份是否为闰年。闰年的条件是:

  • 能被 4 整除但不能被 100 整除,或者
  • 能被 400 整除。
def isLeapYear(year: Int): Boolean = {
  if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0)) {
    true
  } else {
    false
  }
}

val year = 2024
if (isLeapYear(year)) {
  println(s"$year is a leap year")
} else {
  println(s"$year is not a leap year")
}

3.2 练习 2: 计算阶乘

编写一个程序,计算给定整数的阶乘。阶乘的定义是:n! = n * (n-1) * (n-2) * ... * 1。

def factorial(n: Int): Int = {
  var result = 1
  for (i <- 1 to n) {
    result *= i
  }
  result
}

val number = 5
println(s"Factorial of $number is ${factorial(number)}")

3.3 练习 3: 打印九九乘法表

编写一个程序,打印九九乘法表。

for (i <- 1 to 9) {
  for (j <- 1 to 9) {
    print(s"$i * $j = ${i * j}\t")
  }
  println()
}

4. 总结

在本教程中,我们学习了 Scala 中的控制结构,包括 if/else 语句和各种循环结构。这些结构是编程中的基本工具,帮助我们根据条件执行不同的代码块,或者重复执行某段代码。通过实践练习,我们进一步巩固了这些概念。

在接下来的课程中,我们将学习函数式编程基础,进一步扩展我们的编程技能。